import pandas as pd
import configparser

def read_excel_with_header(path, header_row):
    """读取 Excel，header_row 从 1 开始计数"""
    return pd.read_excel(path, header=header_row - 1)

def remove_keys_by_config(config_path="config.ini"):
    # 读取配置
    cfg = configparser.ConfigParser()
    cfg.read(config_path, encoding="utf-8")

    file_a = cfg["files"]["a"]
    file_b = cfg["files"]["b"]
    output_path = cfg["files"].get("output", "filtered.xlsx")

    a_header_row = int(cfg["header"]["a_header_row"])
    b_header_row = int(cfg["header"]["b_header_row"])

    a_key_col = int(cfg["columns"]["a_key_col"]) - 1
    b_key_col = int(cfg["columns"]["b_key_col"]) - 1

    ignore_case = cfg["options"].getboolean("ignore_case", False)

    # 读取两个表格
    df_a = read_excel_with_header(file_a, a_header_row)
    df_b = read_excel_with_header(file_b, b_header_row)

    # 获取对应列
    key_a = df_a.columns[a_key_col]
    key_b = df_b.columns[b_key_col]

    # 转成字符串处理
    series_a = df_a[key_a].astype(str).str.strip()
    series_b = df_b[key_b].astype(str).str.strip()

    if ignore_case:
        series_a = series_a.str.lower()
        series_b = series_b.str.lower()

    # 过滤出 a 中不在 b 的行
    filtered = df_a[~series_a.isin(series_b)]

    # 输出结果
    filtered.to_excel(output_path, index=False)
    print("✅ 过滤完成！")
    print(f"📄 输入文件 A：{file_a}")
    print(f"📄 输入文件 B：{file_b}")
    print(f"💾 输出文件：{output_path}")
    print(f"📉 删除行数：{len(df_a) - len(filtered)} / {len(df_a)}")
'''
从 a 文件中移除那些 key 在 b 文件出现的行
'''
if __name__ == "__main__":
    remove_keys_by_config("config.ini")
